package moore.generator.template

import java.util.ArrayList

class MsfArchitettureTemplate { 
	def public static String getArchitectureMsfPart(String msfName,int regDim,
		ArrayList<String> fInput, ArrayList<String> goutput){
		'''
		architecture structural of «msfName» is
			signal state_reg_out: std_logic_vector(«regDim-1» downto 0):=(others=>'0');
			signal state_reg_in: std_logic_vector(«regDim-1» downto 0):=(others=>'0');
			begin
			-- istantio la funzione f
				fne_stato_prossimo: entity work.«msfName»_F
										  port map(
												«FOR in:fInput»
												«in»=>«in», 
												«ENDFOR»
												prev_state=>state_reg_out,
												next_state=>state_reg_in
										  );
			-- registro di stato
				reg_stato: entity work.PIPO
							  generic map( dim=>«regDim»)
							  port map(
									data_in=>state_reg_in,
									data_out=>state_reg_out,
									CE=>'1',
									CLK=>CLK,
									Reset=>'0'
							  );
			-- istanzio la funzione g
				fne_uscita: entity work.«msfName»_G
								port map(
									«FOR out:goutput»
									«out»=>«out»,
									«ENDFOR»
									prev_state=>state_reg_out
								);
		end structural;
		'''
	}
}